package responddto

import (
	"server/application/db/schema/sdto"
)

// HuaweiAuthResponse 表示华为OAuth 2.0认证成功响应的结构体。
type HuaweiAuthResponse struct {
	// TokenType 固定字符串“Bearer”。
	// 示例值: "Bearer"
	TokenType string `json:"token_type"`

	// AccessToken Access Token，访问被权限管控资源的凭证。
	// 示例值: "your_access_token_here"
	AccessToken string `json:"access_token"`

	// Scope Access Token中的scope。可选字段。
	// 示例值: "openid profile email"
	Scope string `json:"scope,omitempty"`

	// ExpiresIn Access Token的过期时间，以秒为单位。有效期为60分钟。可选字段。
	// 示例值: 3600
	ExpiresIn int64 `json:"expires_in,omitempty,string"`

	// RefreshToken 用于刷新Access Token。当“grant_type”为“authorization_code”时，会返回此参数。
	// Refresh Token有效期为180天。可选字段。
	// 示例值: "your_refresh_token_here"
	RefreshToken string `json:"refresh_token,omitempty"`

	// IDToken 获取code时，包含openid权限，则会返回此参数（JWT格式）。
	// ID Token的描述信息请参见验证ID Token有效性中ID Token描述。可选字段。
	// 示例值: "your_id_token_here"
	IDToken string `json:"id_token,omitempty"`

	//----------------------------------------------以下是错误信息字段----------------------------------

	Error            int    `json:"error"`             //错误码
	SubError         int    `json:"sub_error"`         // 业务响应主错误码，详见错误码。
	ErrorDescription string `json:"error_description"` //  错误描述信息。
}

// HuaweiSuccessResponse 表示华为API调用成功时的响应结构体。
type HuaweiParseAccessTokenSuccess struct {
	// ClientID 在创建应用后，由华为开发者联盟为应用分配的唯一标识。
	// 应用中OAuth 2.0客户端ID(凭据)-Client ID的查询方法，请参见查看应用基本信息。
	// 示例值: "your_client_id_here"
	ClientID string `json:"client_id"`

	// ExpireIn Access Token的过期时间，单位为秒。有效期为60分钟。
	// 示例值: 3600
	ExpireIn int `json:"expire_in"`

	// UnionID 用户的union_id，由用户账号和应用开发者账号签名而成。可选字段。
	// 示例值: "user_union_id_here" 或者为空
	UnionID string `json:"union_id,omitempty"`

	// OpenID 用户的open_id，由用户账号和应用ID加密生成的，当Access Token为用户级，且入参open_id为OPENID时才返回。可选字段。
	// 示例值: "user_open_id_here" 或者为空
	OpenID string `json:"open_id,omitempty"`

	// Scope 用户授权scope列表，当Access Token为用户级时才返回。可选字段。
	// 示例值: "openid profile email" 或者为空
	Scope string `json:"scope,omitempty"`

	// ProjectID 项目ID，项目的唯一标识。可选字段。
	// 示例值: "your_project_id_here" 或者为空
	ProjectID string `json:"project_id,omitempty"`

	// Type 凭证类型。0：通过获取用户级凭证获取Access Token。1：通过获取应用级凭证获取Access Token。可选字段。
	// 示例值: 0 或者 1
	Type int `json:"type,omitempty"`
	// Error 错误描述信息，错误码在HTTP响应头中的NSP_STATUS字段返回，详见本章节错误码。

	//----------------------------------------------以下是错误信息字段----------------------------------
	// 示例值: "invalid_request"
	Error string `json:"error"`
}

// alse:未登录，true:已登录
type HuaweiLoginResult struct {
	IsLoginSuccess bool                  `json:"is_login_success"`
	Token          string                `json:"token"`
	UserInfo       *sdto.UserAccountInfo `json:"user_info"`
}
